/*
 * Copyright (c) 2010 Mathias Garbe <code@mathias-garbe.de>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef PACKET_HPP
#define PACKET_HPP

#include "Games.hpp"
#include <iostream>
#include <sstream>
#include <vector>

enum PacketType
{
    UnknownPacketType,
    IncomingPacket = 1,
    OutgoingPacket,
    IncomingBroadcast,
    OutgoingBroadcast
};

enum ParsedPacketType
{
    NotParsed = 0,
    ChatMessage
};

class Packet
{
private:
    std::vector<char> addr;
    std::vector<char> message;
    

    Games::GameType gameType;
    PacketType type;

    ParsedPacketType parsedTyped;

    void tryParse();

    // Quick Hack
    // Chatmessage
    std::string chatMessage, chatNick;

public:
    Packet();
    ~Packet();

    void setType(PacketType type);
    void setAddr(char* addr);
    void setMessage(char* msg, int length);

    PacketType getType();
    char* getAddr();
    char* getMessage();
    int getMessageLength();

    ParsedPacketType getParsedType() { return this->parsedTyped; };
    Games::GameType getGameType() { return this->gameType; };

    // Quick hack
    // Chatmessage
    std::string getChatMessage() { return this->chatMessage; };
    std::string getChatNick() { return this->chatNick; };
};

#endif
